A number of factors are involved in the quality of computer programs, computer applications, and/or computer software. Some of these factors include correctness, reliability, efficiency, usability, maintainability, testability, flexibility, portability, re-usability, and interoperability. Correctness may be defined as the extent to which the subject software complies with specifications and user objectives for the software. Reliability may be defined as the extent to which the software is expected to perform its intended function. Efficiency may be defined as the amount of computing resources the software consumes while executing. Usability may be defined relative to how much effort is required to learn, operate, prepare input, and prepare output. Maintainability may be defined by the effort required to locate and resolve operational issues, for example bugs or crashes. Testability may be defined by the effort required to test the software. Flexibility may be defined by the effort required to modify the software to add functionality. Portability may be defined by the effort required to install the software on a different execution platform and bring it into service. Re-usability may be defined by the extent to which software can be used in other applications. Interoperability may be defined by the effort required to interface one software system with another software system.